Неправильный размер файла в Debian Etch

Автор 51469bg, 12 Сентября 2010, 23:18

« предыдущая тема - следующая тема »

0 Пользователей и 2 Гостей просматривают эту тему.

51469bg

12 Сентября 2010, 23:18 Последнее редактирование: 13 Сентября 2010, 01:16 от 42
Столкнулся с такой небольшой проблемой, в HTTP на странице сайта не правильно отображается размер файла больше 4 гигабай.

То есть к примеру, не 4.37Gb, а показывает что-то типа 300 или 500 мегабайт.

Apache 2.2.3-4 + PHP 5.2.0-8 на Debian Etch. В репозитории это самый последний из доступных пакетов.

Можно это как-то пофиксить?

P.S. По пьяне написал в другой раздел, дико извеняюсь, перенесите пож в Debian.

Vicpo

12 Сентября 2010, 23:46 #1 Последнее редактирование: 13 Сентября 2010, 01:17 от 42
Цитата: 51469bg от 12 Сентября 2010, 23:18Столкнулся с такой небольшой проблемой, в HTTP на странице сайта не правильно отображается размер файла больше 4 гигабай.

То есть к примеру, не 4.37Gb, а показывает что-то типа 300 или 500 мегабайт.

Apache 2.2.3-4 на Debian Etch. В репозитории это самый последний из доступных пакетов.

Можно это как-то пофиксить?

P.S. По пьяне написал в другой раздел, дико извеняюсь, перенесите пож в Debian.

Вы хоть скриншот приложите или ссылку где смотреть...
А то не совсем понятно

51469bg

13 Сентября 2010, 14:38 #2 Последнее редактирование: 13 Сентября 2010, 23:25 от 42
Цитата: Vicpo от 12 Сентября 2010, 23:46Вы хоть скриншот приложите или ссылку где смотреть...
А то не совсем понятно
Проблема похоже вот в этом.

ЦитироватьLFS в linux: работаем с файлами больше 2Гб
На днях столкнулся с проблемой: код, который читает директорию, работал каким-то странным образом. Перебирались несколько файлов, находящихся внутри директории, но в какой-то момент чтение прекращалось, даже не возвращая никакой ошибки. Надо сказать, что вообще там было использование библиотеки APR для чтения, так что я не мог быстро заглянуть "внутрь" нее, чтобы понять: что не так. Проблема оказалась проста - в директории был файл размером 2.5 Гб. Мне показалось странным, что файловая система спокойно создает и работает с более крупными файлами, а я - нет .

Таким образом я узнал о Large File Support в linux. В 32-битных ОС размер файла ограничен 32 битами... а так как размер сделали знаковым, то он стал ограничен 31 битом или 2 Гб. Этот "барьер" можно обойти. В 32-битных ОС есть специальный "64 битный интерфейс" для работы с файловой системой. Он позволяет производить все те же операции над файловой системой, только без ограничения размера файла (реальный максимальный размер файла при 64-битном интерфейсе определяется файловой системой и ОС). Чтобы на него переключиться необходимо скомпилировать весь свой код (конечно который использует I/O операции) с указанием определенных макросов. Эти макросы так же зависят от платформы. Чтобы их получить надо вызвать:

$getconf LFS_CFLAGS

Обычно эти флаги такие:
Linux

-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
В общем пересобрал PHP 5.2.14, вот так:

wget http://www.php.net/g....php.net/mirror
tar -xvzf php-5.2.14.tar.gz
apt-get install libxml2-dev
./configure
в фаиле Makefile, нашел
CC = gcc
Заменил на:
CC = gcc -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
make
make install

Не помогло, если выводить просмотр файлов через PHP скрипт RapidGet размер не правельный



если просто поставить вывести листинг директори, или просматривать на ftp - размер правельно определяется и показывает.